<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1. 对象的简写
        let name = "moduleA"
        let obj1 = {
            name:'a'
        }
        console.log(obj1);
        // name变量 和  obj里的key 并不冲突

        // 一个需求场景 创建的对象所有属性名需要添加一个前缀
        let obj2 ={
            name ,
            [`${name}-Ha1`] (){},
            [`${name}-Ha2`] (){}
        }
        console.log(obj2);

        // 2. 扩展运算符 用法和数组一致
        let obj3 = {
            ...obj2,
            'k':'对象',
            ...obj1,
            name:'b' // 如果遇到重名的属性 那么会覆盖旧的
        }
        console.log(obj3);

        // 3. Object.assign   展开对象 和 ... 功能一样
        let obj4 = {
            name:'lrq',
            age:'24'
        }
        let obj5 = {
            name:'LRQ',
            sex:"男"
        }
        console.log(Object.assign(obj5 , obj4)); 
        console.log(obj5);// 会被合并到第一个参数里

        // 4. Object.is  判断类型 与 === 不同的是 可以判断NaN

        console.log(Object.is(5,5));
        console.log(Object.is(5,'5'));
        console.log(NaN === NaN); // === 无法判断
        console.log(Object.is(NaN,NaN)); // Object可以判断为 true
        console.log(Object.is(parseInt('lrq') ,NaN)); // true
        console.log(Object.is({},{})); // false 两个对象地址不同 所以是false


        // es8 新增
        /* 
        Object.values()  拿键值
        Object.entries()  拿键名和键值
        */
       console.log(Object.values(obj5));
       console.log(Object.entries(obj5));


    </script>
</body>
</html>